#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define rep(i, a, b) for (int i = (a); i <= (b); i++)
#define per(i, a, b) for (int i = (a); i >= (b); i--)
#define endl '\n'
const int N = 20;

int n, m;
int a[N];
int g[N][N];
ll dp[1 << 19][N];
void solve() {
  cin >> n >> m;
  rep(i, 1, m) {
    int u, v;
    cin >> u >> v;
    u--, v--;
    if (u > v) swap(u, v);
    g[u][v] = g[v][u] = 1;
    int s = (1 << u) | (1 << v);
    dp[s][v] = 1;
  }
  int mx = (1 << n) - 1;
  ll ans = 0;
  rep(s, 0, mx) {
    bitset<20> bs(s);
    if (bs.count() <= 2) continue;
    int i = 0;
    while (!bs[i]) i++;
    rep(j, i + 1, n - 1) {
      if (j == i || !bs[j]) continue;
      rep(k, i + 1, n - 1) {
        if (j == k || !bs[k]) continue;
        if (!g[k][j]) continue;
        dp[s][j] += dp[s ^ (1 << j)][k];
      }
      if (g[i][j] && dp[s][j]) {
        ans += dp[s][j];
      }
    }
  }
  cout << ans / 2 << endl;
  return;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t = 1;
  while (t--) solve();
  return 0;
}